﻿'Imports Fgv.Framework.Email.Dominio
'Imports System.IO

'Namespace Email.Servicos


'    ''' <summary>
'    ''' Classe abstrata da qual todas as classes de implementação de preenchimento de envio de email 
'    ''' devem herdar para se utilizar dos 'facilitadores de configuração' nesta presentes
'    ''' </summary>
'    ''' <remarks>Essa classe possui como facilitadores de configuração um preenchimento de solicitação 
'    ''' de envio de email com os dados default do template de email utilizado pela solicitação e dados 
'    ''' default da conta de envio utilizada pelo template de email.</remarks>
'    Public MustInherit Class GerenteEmail

'        Protected _EnvioEmailServico As IEnvioEmailServico
'        Public Property EnvioEmailServico() As IEnvioEmailServico
'            Get
'                Return _EnvioEmailServico
'            End Get
'            Set(ByVal value As IEnvioEmailServico)
'                _EnvioEmailServico = value
'            End Set
'        End Property

'        ''' <summary>
'        ''' Método que preenche/configura as configurações default de uma solicitação de envio de email
'        ''' </summary>
'        ''' <param name="_solicitacaoEnvioEmail">solicitação de email a ser 'configurada'</param>
'        ''' <param name="_anexos">arquivos customizados a serem anexados à solicitação, cajo haja</param>
'        ''' <remarks>Dada uma solicitação, ele busca o assunto default do email, os ccs, bccs e replyto 
'        ''' defaults do email ou da conta de envio, busca a conta de envio para recuperar dados como 
'        ''' remetente, senha, verifica se existe algum arquivo padrão a ser anexado, etc.</remarks>
'        Public Sub PreencheSolicitacaoEnvioEmail(ByRef _solicitacaoEnvioEmail As SolicitacaoEnvioEmail, _
'                                                 Optional ByRef _anexos As List(Of SolicitacaoEnvioEmailAnexo) = Nothing)
'            Dim _email As Dominio.Email = _EnvioEmailServico.BuscarEmailPorId(_solicitacaoEnvioEmail.Email.Id)
'            Dim _emailEnvioConta As EmailEnvioConta = _EnvioEmailServico.BuscarContaPorId(_email.EmailEnvioConta.Id)
'            _solicitacaoEnvioEmail.Status = SolicitacaoEnvioEmail.StatusEnvio.Agendado
'            If Not _solicitacaoEnvioEmail.DataHoraAgendada.HasValue Then
'                _solicitacaoEnvioEmail.DataHoraAgendada = Now
'            End If
'            If String.IsNullOrEmpty(_solicitacaoEnvioEmail.Assunto) Then
'                _solicitacaoEnvioEmail.Assunto = _email.Assunto
'            End If
'            If String.IsNullOrEmpty(_solicitacaoEnvioEmail.CC) Then
'                _solicitacaoEnvioEmail.CC = IIf(String.IsNullOrEmpty(_email.CC), _
'                                                _emailEnvioConta.CC, _
'                                                _email.CC)
'            End If
'            If String.IsNullOrEmpty(_solicitacaoEnvioEmail.BCC) Then
'                _solicitacaoEnvioEmail.BCC = IIf(String.IsNullOrEmpty(_email.BCC), _
'                                                 _emailEnvioConta.BCC, _
'                                                 _email.BCC)
'            End If
'            If String.IsNullOrEmpty(_solicitacaoEnvioEmail.BCC) Then
'                _solicitacaoEnvioEmail.BCC = IIf(String.IsNullOrEmpty(_email.BCC), _
'                                                 _emailEnvioConta.BCC, _
'                                                 _email.BCC)
'            End If
'            If String.IsNullOrEmpty(_solicitacaoEnvioEmail.Texto) Then
'                If String.IsNullOrEmpty(_email.ArquivoCorpoEmail) Then
'                    _solicitacaoEnvioEmail.Texto = _email.Texto
'                Else
'                    _solicitacaoEnvioEmail.Texto = _
'                        LeConteudoArquivoCorpoEmail(_email.ArquivoCorpoEmail & ".txt")
'                End If
'            End If
'            If String.IsNullOrEmpty(_solicitacaoEnvioEmail.TextoHtml) Then
'                If String.IsNullOrEmpty(_email.ArquivoCorpoEmail) Then
'                    _solicitacaoEnvioEmail.TextoHtml = _email.TextoHtml
'                Else
'                    _solicitacaoEnvioEmail.TextoHtml = _
'                        LeConteudoArquivoCorpoEmail(_email.ArquivoCorpoEmail & ".html")
'                End If
'            End If
'            'Anexos
'            If Not IsNothing(_anexos) Then
'                For Each _anexo As SolicitacaoEnvioEmailAnexo In _anexos
'                    _solicitacaoEnvioEmail.AdicionaAnexo(_anexo)
'                Next
'            End If
'            _email = Nothing
'            _emailEnvioConta = Nothing
'        End Sub

'        ''' <summary>
'        ''' Função privada que lê o conteudo de um arquivo cujo caminho é informado e retorna seu conteúdo.
'        ''' </summary>
'        ''' <param name="_arquivo"></param>
'        ''' <returns></returns>
'        ''' <remarks>Essa função é utilizada nos casos em que o template de email utilizado por uma 
'        ''' solicitação não possue conteúdo customizado preenchido no objeto Email, 
'        ''' além de um caminho de arquivo contendo o conteúdo</remarks>
'        Private Function LeConteudoArquivoCorpoEmail(ByVal _arquivo As String) As String
'            Dim _texto As String = String.Empty
'            Dim _file As New FileInfo(_arquivo)
'            If _file.Exists Then
'                Using reader As New StreamReader(_arquivo, System.Text.Encoding.GetEncoding(1252), True)
'                    _texto = reader.ReadToEnd()
'                    reader.Close()
'                    reader.Dispose()
'                End Using
'            End If
'            _file = Nothing
'            Return _texto
'        End Function

'    End Class
'End Namespace
